كيفية ضبط Nginx للعمل كخادم ويب وكوسيط عكسي لـ Apache على خادم Ubuntu 18.04
في بيئات الخوادم الحديثة، يعتبر استخدام Nginx و Apache معًا أحد الحلول الفعّالة لإدارة حركة مرور الويب. حيث يستخدم العديد من مديري الأنظمة Nginx كخادم ويب رئيسي وكوسيط عكسي لـ Apache، مما يتيح الاستفادة من ميزات الأداء والموثوقية التي يقدمها كلا الخادمين. يوفر Nginx قدرة فائقة على التعامل مع الاتصالات المتزامنة بفضل هيكله الخفيف، بينما يعد Apache الخيار التقليدي للعديد من تطبيقات الويب نظرًا لدعمه العميق لعدة لغات برمجة وأنظمة إدارة المحتوى.
في هذا المقال، سنتناول كيفية إعداد Nginx ليعمل كخادم ويب وكوسيط عكسي (Reverse Proxy) لـ Apache على خادم يعمل بنظام Ubuntu 18.04.
1. مقدمة حول Nginx و Apache
Apache هو خادم ويب مفتوح المصدر يُستخدم على نطاق واسع في بيئات استضافة الويب. يعتمد على النموذج التقليدي الذي يستخدم العمليات أو الخيوط لاستقبال الطلبات، مما يجعله ثقيلًا بعض الشيء في التعامل مع عدد كبير من الطلبات المتزامنة.
أما Nginx، فهو خادم ويب يختلف عن Apache في بنيته، حيث يعتمد على نموذج غير متزامن يستخدم حدثًا واحدًا لمعالجة العديد من الطلبات في وقت واحد. وهذا يجعله أسرع في التعامل مع كميات ضخمة من البيانات والطلبات المتزامنة، مما يجعله الاختيار المثالي للتعامل مع حركة المرور الكبيرة.
الهدف من استخدام Nginx مع Apache هو الاستفادة من قدرة Nginx على التعامل مع الطلبات المتزامنة، بينما يُترك Apache للتعامل مع المحتوى الديناميكي مثل PHP، ودمج هذه الميزات معًا لتحقيق أفضل أداء وموثوقية.
2. المتطلبات الأساسية
قبل البدء في إعداد Nginx و Apache، تأكد من أن لديك:
-
خادم Ubuntu 18.04 محدث
-
صلاحيات جذر (root) أو صلاحيات sudo.
-
خادم Apache مثبت ومهيأ.
3. تثبيت Nginx و Apache
إذا لم يكن لديك Nginx و Apache مثبتين بالفعل على الخادم، فيمكنك تثبيتهما بسهولة باستخدام apt.
-
تحديث الحزم:
bashsudo apt update -
تثبيت Nginx:
bashsudo apt install nginx -
تثبيت Apache:
bashsudo apt install apache2 -
التأكد من تشغيل كلا الخادمين:
bashsudo systemctl start nginx sudo systemctl start apache2 -
التحقق من حالة الخوادم:
bashsudo systemctl status nginx sudo systemctl status apache2
4. تكوين Nginx كوسيط عكسي لـ Apache
نحتاج الآن إلى تكوين Nginx ليعمل كوسيط عكسي، مما يعني أن Nginx سيتعامل مع جميع الطلبات الواردة، ثم يرسل الطلبات إلى Apache عندما يكون من الضروري معالجة المحتوى الديناميكي.
-
تحرير ملف تكوين Nginx:
bashsudo nano /etc/nginx/sites-available/default -
تعديل ملف التكوين ليكون على الشكل التالي، حيث يعمل Nginx كوسيط عكسي يرسل الطلبات إلى Apache:
nginxserver { listen 80 default_server; listen [::]:80 default_server; root /var/www/html; index index.html index.htm index.php; server_name _; location / { # طلبات ثابتة يتعامل معها Nginx مباشرة try_files $uri $uri/ =404; } location ~ \.php$ { # يتم إرسال طلبات PHP إلى Apache fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.ht { deny all; } # إعادة توجيه الطلبات إلى Apache لخدمات إضافية location /app/ { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
في هذا التكوين، Nginx سيتعامل مع جميع الطلبات الثابتة مثل HTML، وملفات الصور، وCSS، وJavaScript. أما بالنسبة للطلبات التي تتطلب معالجة ديناميكية مثل PHP، فسيتم إرسالها إلى Apache عبر البروتوكول FastCGI.
5. تكوين Apache للاستماع على منفذ مختلف
عادةً ما يستمع Apache على المنفذ 80، لكننا سنحتاج إلى تكوينه ليعمل على منفذ مختلف لكي يسمح لـ Nginx بأن يكون على نفس المنفذ. هذا سيتطلب تغيير إعدادات Apache.
-
تعديل تكوين Apache للاستماع على المنفذ 8080:
bashsudo nano /etc/apache2/ports.confيجب أن يحتوي الملف على ما يلي:
apacheListen 8080 -
الآن، سنقوم بتعديل التكوين الافتراضي لـ Apache ليتوافق مع المنفذ الجديد:
bashsudo nano /etc/apache2/sites-available/000-default.confثم تعديل السطر التالي ليكون:
apacheVirtualHost *:8080> -
إعادة تشغيل Apache ليأخذ التغييرات بعين الاعتبار:
bashsudo systemctl restart apache2
6. اختبار التكوين
بعد إتمام تكوين Nginx و Apache، يجب أن نختبر الإعدادات للتأكد من أن كل شيء يعمل بشكل صحيح.
-
التحقق من تكوين Nginx:
bashsudo nginx -tإذا كانت النتيجة تشير إلى عدم وجود أخطاء، يمكننا إعادة تحميل Nginx لتطبيق التغييرات:
bashsudo systemctl reload nginx -
التأكد من أن كلا الخادمين يعملان بشكل صحيح:
-
افتح المتصفح وأدخل عنوان الخادم (مثلاً http://your-server-ip) للتأكد من أن صفحة الويب تظهر بشكل صحيح.
-
تأكد من أن الطلبات التي تتطلب معالجة PHP تتم عبر Apache، بينما يتم التعامل مع المحتوى الثابت بواسطة Nginx.
-
7. إدارة الخوادم وحركة المرور
في حال كان لديك خوادم عديدة أو ترغب في التحكم في كيفية توزيع حركة المرور بين Nginx و Apache، يمكنك استخدام التوجيهات المتقدمة في Nginx مثل:
-
استخدام الصفوف الخلفية (upstream) لتحديد أكثر من خادم ل Apache.
-
تكوين إعدادات التخزين المؤقت (caching) في Nginx لتحسين الأداء.
8. تحسين الأداء
أحد الفوائد الرئيسية لاستخدام Nginx و Apache معًا هو تحسين الأداء. يتم التعامل مع الطلبات الثابتة مثل HTML و CSS و JS بواسطة Nginx، مما يقلل من الضغط على Apache. بالنسبة للطلبات الديناميكية مثل PHP، يتم إرسالها إلى Apache باستخدام FastCGI، وهو خيار فعال لمعالجة التطبيقات الديناميكية.
يمكنك تحسين الأداء بشكل أكبر باستخدام خيارات مثل تخزين الملفات مؤقتًا (caching)، واستخدام الضغط (gzip) على Nginx، وتقسيم العمل بين الخوادم بشكل مناسب.
9. الصيانة والمراقبة
من المهم متابعة خوادم Nginx و Apache بشكل دوري للتأكد من أنهما يعملان بشكل سلس. يمكنك استخدام أدوات مثل htop و systemctl لمراقبة أداء النظام ومعرفة أي مشاكل في الأداء.
10. الختام
إن تكوين Nginx ليعمل كخادم ويب وكوسيط عكسي لـ Apache على خادم Ubuntu 18.04 هو خيار مثالي لتحسين أداء موقعك وتوزيع الحمل بين الخوادم بشكل فعّال. يساعدك هذا التكوين على الاستفادة من أفضل ميزات كل خادم: السرعة والقدرة على التعامل مع الطلبات المتزامنة في Nginx، والدعم العميق للتطبيقات الديناميكية في Apache.
من خلال تنفيذ هذا التكوين، ستتمكن من ضمان استقرار موقعك، وزيادة سرعته، وتحسين أدائه بشكل عام.

